package app.modules.infrastructure.lov.application.web;

import app.modules.common.dto.web.WebIdDTO;
import app.modules.common.util.web.PageUtil;
import app.modules.infrastructure.lov.business.service.ValueItemService;
import app.modules.infrastructure.lov.dto.web.WebValueItemDTO;
import app.modules.infrastructure.lov.dto.web.WebValueItemQueryDTO;
import app.modules.infrastructure.lov.dto.web.WebValueItemSaveDTO;
import app.modules.infrastructure.lov.dto.web.WebValueItemUpdateDTO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import jasmine.framework.web.entity.WebResult;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

/**
 * @author mh.z
 */
@RestController
public class ValueItemController {
    private ValueItemService valueItemService;

    public ValueItemController(ValueItemService valueItemService) {
        this.valueItemService = valueItemService;
    }

    @Operation(summary = "分页查询值项")
    @PostMapping("/api/infrastructure/lov/pageValueItemsByCond")
    public ResponseEntity<WebResult<List<WebValueItemDTO>>> pageWebValueItemDTOsByCond(
            @RequestBody WebValueItemQueryDTO queryDTO) {
        Page page = PageUtil.getPage(queryDTO);

        List<WebValueItemDTO> recordList = valueItemService.pageWebValueItemDTOsByCond(queryDTO, page);
        WebResult result = PageUtil.getResult(recordList, page);

        return result.toOkEntity();
    }

    @Operation(summary = "查询指定 ID 的值项")
    @PostMapping("/api/infrastructure/lov/getValueItemById")
    public ResponseEntity<WebResult<WebValueItemDTO>> getWebValueItemDtoById(
            @RequestBody WebIdDTO dto) {
        Long id = dto.getId();
        WebValueItemDTO recordDTO = valueItemService.getWebValueItemDtoById(id);

        return WebResult.success(recordDTO).toOkEntity();
    }

    @Operation(summary = "保存值项")
    @PostMapping("/api/infrastructure/lov/saveValueItem")
    public ResponseEntity<WebResult<WebValueItemDTO>> saveValueItem(
            @Valid @RequestBody WebValueItemSaveDTO saveDTO) {
        WebValueItemDTO recordDTO = valueItemService.saveValueItem(saveDTO);
        WebResult result = WebResult.success(recordDTO);

        return result.toOkEntity();
    }

    @Operation(summary = "更新值项")
    @PostMapping("/api/infrastructure/lov/updateValueItem")
    public ResponseEntity<WebResult<WebValueItemDTO>> updateValueItem(
            @Valid @RequestBody WebValueItemUpdateDTO updateDTO) {
        WebValueItemDTO recordDTO = valueItemService.updateValueItem(updateDTO);
        WebResult result = WebResult.success(recordDTO);

        return result.toOkEntity();
    }

}
